/**
 * Generali Solutions d'assurances - Tous droits réservés &copy; 2007 - 2010
 */
package fr.generali.accueilclient.utils.messages;



import java.text.MessageFormat;
import java.util.ResourceBundle;

/**
 * Classe utilitaire de gestion des messages
 * 
 * @author Guillaume Lancelin
 */
public class MessageBundle {
    
    /**
     * le bundle de libellés
     */
    private static ResourceBundle bundle = ResourceBundle.getBundle("fr.generali.accueilclient.accueilclient-messages");
    
    /**
     * le bundle de messages fonctionnels
     */
    private static ResourceBundle functionalBundle = ResourceBundle
                                                        .getBundle("fr.generali.accueilclient.erreur-messages");
    
    /**
     * le bundle de messages techniques
     */
    private static ResourceBundle technicalBundle = ResourceBundle
                                                        .getBundle("fr.generali.accueilclient.erreur-techniques");
    
    /**
     * Renvoie un libellé à partir de sa clé.
     * 
     * @param cle la clé
     * @return le libellé
     */
    public static String getMessage(String cle) {
        return bundle.getString(cle);
    }

    /**
     * Renvoie un libellé pour la clé donnée et les paramètres.
     * 
     * @param cle clé dont on veut le message.
     * @param params paramètres à appliquer au message.
     * @return le libellé
     */
    public static String getMessage(String cle, Object... params) {
        return getMessage(bundle, cle, params);
    }
    
    /**
     * Renvoie un libellé à partir de sa clé.
     * 
     * @param cle la clé
     * @return le libellé
     */
    public static String getFunctionalMessage(String cle) {
        return functionalBundle.getString(cle);
    }

    /**
     * Renvoie un libellé pour la clé donnée et les paramètres.
     * 
     * @param cle clé dont on veut le message.
     * @param params paramètres à appliquer au message.
     * @return le message du bundle auto pour la clé donnée et les paramètres.
     */
    public static String getFunctionalMessage(String cle, Object... params) {
        return getMessage(functionalBundle, cle, params);
    }
    
    /**
     * Renvoie un libellé à partir de sa clé.
     * 
     * @param cle la clé
     * @return le libellé
     */
    public static String getTechnicalMessage(String cle) {
        return technicalBundle.getString(cle);
    }

    /**
     * Renvoie un libellé pour la clé donnée et les paramètres.
     * 
     * @param cle clé dont on veut le message.
     * @param params paramètres à appliquer au message.
     * @return le message du bundle auto pour la clé donnée et les paramètres.
     */
    public static String getTechnicalMessage(String cle, Object... params) {
        return getMessage(technicalBundle, cle, params);
    }
    
    /**
     * Renvoie un libellé pour un bundle, la clé donnée et les paramètres.
     * 
     * @param aBundle le bundle à utiliser
     * @param cle la clé
     * @param params les paramètres
     * @return le libellé
     */
    private static String getMessage(ResourceBundle aBundle, String cle, Object... params) {
        String msg = aBundle.getString(cle);
        if (params == null) {
            return msg;
        }
        return MessageFormat.format(msg, params);
    }
}
